package skcontroller

import (
	"Cgo/backend/models"
	"Cgo/common"
	"net/http"
	"strconv"

	"github.com/gin-gonic/gin"
)

func SkBookController(r *gin.RouterGroup) {
	r.POST("/updateBook", common.HandlerFunc(updateBookHandler))
	r.POST("/deleteBook", common.HandlerFunc(deleteBookHandler))
	r.POST("/addBook", common.HandlerFunc(addBookHandler))
	r.GET("/refreshBook", common.HandlerFunc(refreshBooks))
}

type HandlerFunc func(ctx *gin.Context)

// @Summary 书籍修改
// @Description 书籍修改
// @Tags sk后台接口
// @Accept json
// @Produce json
// @Param book body models.SkBook true "书名"
// @Success 200 {object} common.RT[models.SkBook]
// @Router /backend/sk/book/updateBook [post]
// UpdateBook 修改书籍信息
func updateBookHandler(ctx *gin.Context) common.Result {
	var requestData models.SkBook

	if err := ctx.BindJSON(&requestData); err != nil {
		ctx.JSON(http.StatusBadRequest, common.R.Fail(err.Error()))
		return common.R.Fail(err.Error()) // 返回错误信息
	}

	// 调用 bookDao 中的 UpdateBook 方法
	if err := BookDao.UpdateBook(requestData); err != nil {
		ctx.JSON(http.StatusInternalServerError, common.R.Fail(err.Error()))
		return common.R.Fail(err.Error()) // 返回错误信息
	}

	ctx.JSON(http.StatusOK, common.R.Success(nil))
	return common.R.Success(nil) // 返回成功信息
}

// @Summary 书籍删除
// @Description 书籍删除
// @Tags sk后台接口
// @Accept json
// @Produce json
// @Param bookId query int true "书Id"
// @Success 200 {object} common.RT[string]
// @Router /backend/sk/book/deleteBook [post]
// DeleteBook 删除书籍
func deleteBookHandler(ctx *gin.Context) common.Result {
	bookId := ctx.Query("bookId")
	if bookId == "" {
		return common.R.Fail("请输入要删除的书籍ID")
	}

	// 将bookId转换为整数
	bookIdInt, err := strconv.Atoi(bookId)
	if err != nil {
		return common.R.Fail("书籍ID格式错误")
	}

	// 调用删除书籍的函数
	err = BookDao.DeleteBook(bookIdInt)
	if err != nil {
		return common.R.Fail("删除书籍失败")
	}

	return common.R.Success("删除书籍成功")
}

// @Summary 书籍添加
// @Description 书籍添加
// @Tags sk后台接口
// @Accept json
// @Produce json
// @Param  book body models.SkBook true "书籍信息"
// @Success 200 {object} common.RT[string]
// @Router /backend/sk/book/addBook [post]
// AddBook 添加书籍
func addBookHandler(ctx *gin.Context) common.Result {
	var books models.SkBook
	err := ctx.ShouldBindJSON(&books)
	if err != nil {
		return common.R.Fail("参数错误")
	}
	if books.Bookname == "" || books.Autor == "" {
		return common.R.Fail("输入框不能为空")
	}
	err = BookDao.AddBook(books.Bookid, books.Bookname, books.Autor, books.Type, books.State, books.Bookurl)
	if err != nil {
		return common.R.Fail("添加失败")
	}
	return common.R.Success("添加成功")
}

// @Summary 书籍刷新
// @Description 书籍刷新
// @Tags sk后台接口
// @Accept json
// @Produce json
// @Success 200 {object} common.RT[models.SkBook]
// @Router /backend/sk/book/refreshBook [get]
// RefreshBooks 刷新书籍数据
func refreshBooks(ctx *gin.Context) common.Result {
	books, err := BookDao.GetBooks()
	if err != nil {
		return common.R.Fail("获取图书数据失败")
	}

	// 返回图书数据
	return common.R.Success(books)
}
